package editorsvg.editor.documento;

import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.geom.AffineTransform;

/**
 * Representa un elemento que es una instancia de un símbolo
 * @author Jorge Berjano
 */
public class ElementoInstanciaSimbolo extends ElementoGrafico {

    private Simbolo simbolo;

    public ElementoInstanciaSimbolo(Simbolo simbolo) {
        this.simbolo = simbolo;
    }

    public void centrarEn(double x, double y) {
        double dx = x - getCentro().getX();
        double dy = y - getCentro().getY();
        getTransformacion().desplazar(dx, dy);
    }

    @Override
    public Shape getContorno() {
        return getTransformacion().transformar(simbolo.getContorno());
    }

    @Override
    public void pintar(Graphics2D graphics) {
        AffineTransform tranformacionInicial = graphics.getTransform();
        graphics.transform(getTransformacion().getAffineTransform());
        simbolo.pintar(graphics);
        graphics.setTransform(tranformacionInicial);
    }

    @Override
    public void actualizar() {
        simbolo.actualizar();
    }

    @Override
    public boolean recorrer(Visitante visitante) {
        if (!super.recorrer(visitante)) {
            return false;
        }
        return simbolo.recorrer(visitante);
    }
}
